package com.java.util;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.java.service.LoginService;

import com.java.common.ConfigEntity;
import com.java.model.UserSession;
import com.java.util.*;

 
public class LoginUtil extends HttpServlet{

	private BindUtils bindUtil = new BindUtils();
	private LoginService loginService = new LoginService();

	public Map login(HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		HttpMap requestMap = bindUtil.requestToMap(request);
		String local_addr = request.getRemoteAddr();
		
		Map model = new HashMap();
		String conn_group = (String) request.getServerName().trim();

		ConfigEntity configEntity = new ConfigEntity(); // Config 정보 가져오기 

        System.out.println("##[START]##=======================================================");
        System.out.println("-- 로그인 PROCESS START [ 접근URL : "+ conn_group +" ] --");

		if (requestMap.get("user_id") != null&& requestMap.get("pwd_text") != null) {
			String page_gb = "";

			if (conn_group.equals(configEntity.getEnableAdmin())|| conn_group.equals(configEntity.getEnableTestAdmin())) {
				page_gb = "0";
			} else if (conn_group.equals(configEntity.getEnableCp())|| conn_group.equals(configEntity.getEnableTestCp())) {
				page_gb = "2";
			} else if (conn_group.equals(configEntity.getEnableCompany()) || conn_group.equals(configEntity.getEnableTestCompany())) {
				page_gb = "3";
			} else if (conn_group.equals(configEntity.getEnableTutor()) || conn_group.equals(configEntity.getEnableTestTutor())) {
				page_gb = "4";
			}

			if (page_gb.equals("")) {
                System.out.println( "     : [WARNING] 접속을 허용하지 않는 URL입니다. " );
                model.put( "loginError", "잘못된 URL로 접속하셨습니다. URL을 확인해주시거나  관리자에게 확인하여 주시기 바랍니다." );
				model.put("result", "N");
			} else {

	            System.out.println( "     : [STEP 1] 접속허용 URL을 확인하였습니다. [ 허용URL구분: "+ page_gb +" ]" );

				String user_id = Crypto.EncodeBySType((String) requestMap.get("user_id"));
				String pwd_text = Crypto.EncodeBySType((String) requestMap.get("pwd_text"));

				requestMap.put("user_id", user_id);
				requestMap.put("pwd_text", pwd_text);
				requestMap.put("local_addr", local_addr);
				requestMap.put("page_gb", page_gb);

				Map userMap = loginService.commonDaoLogin(requestMap);

				try {
					if (userMap.get("ip_chk").equals("Y")) {
	                    System.out.println( "     : [STEP 2] 접속허용 IP를 확인하였습니다. [ "+local_addr+"] " );

						if (userMap != null && userMap.get("login_id") != null) {
							String login_id = "";
							String group_id = "";
							String menu_url = "";
							String ent_id 	= "";
							HttpSession session = request.getSession(true);

							UserSession userSession = (UserSession) new UserSession((Map) userMap);
							session.setAttribute("user", userSession);
	                        System.out.println( "     : [STEP 3] 세션에 사용자 정보를 설정 하였습니다. ==>"+userSession.getUser_name() );
	                        
	                        String main_logo_id            = (String) userMap.get("attach_id");
	                        String main_logo_id_old        = (String) userMap.get("attach_id_old");
	                        
	                        session.setAttribute("main_logo_id",     	main_logo_id);
	        				session.setAttribute("main_logo_id_old", 	main_logo_id_old);

							login_id = (String) userMap.get("login_id");
							CookieUtils.setValue(response, Crypto.EncodeBySType("usid"), login_id);
	                        System.out.println( "     : [STEP 4] 쿠키에 사용자 정보를 설정 하였습니다. [ " + login_id + " ]" );

							group_id = (String) userMap.get("group_id");
							menu_url = (String) loginService.commonDaoGetDefaultMenu(userMap).get("menu_url");
							model.put("result", menu_url);
	                        System.out.println( "     : [STEP 5] 리턴 메뉴URL값을 설정 하였습니다. [ "+group_id+":" + menu_url + " ]" );
	                        
	                        ent_id = (String)userMap.get("ent_id");
	                        session.setAttribute("ent_id", ent_id);
	                        System.out.println( "     : [STEP 6] 기업 아이디 [ "+ent_id+" ]" );
	                        

						} else {
	                        System.out.println( "     : [WARNING] 아이디 패스워드가 일치하지 않습니다. [ id :"+user_id+" | pass :" + pwd_text +" ] " );                         
	                        model.put( "loginError", "아이디/패스워드가 일치하지 않거나 미사용 사용자입니다. 관리자에게 확인하여 주시기 바랍니다." );
							model.put("result", "N");
						}
					} else {
	                    System.out.println( "     : [WARNING] 접속을 허용하지 않는 IP입니다. [ "+local_addr+" ] " ); 
	                    model.put( "loginError", "아이피가 일치 하지 않아 로그인을 할수가 없습니다. 관리자에게 확인하여 주시기 바랍니다." );
						model.put("result", "N");
					}
				} catch (Exception e) {
	                System.out.println( "     : [EXCEPTION] 로그인 처리중에 EXCEPTION 발생 " );
					//logger.error(e.getMessage(), e);
	                model.put( "loginError", "아이디/패스워드가 일치하지 않거나 미사용 사용자입니다. 관리자에게 확인하여 주시기 바랍니다." );
					model.put("result", "N");
				}
			} // IF page_gb.equals("")
		}
		System.out.println("##[END]##=========================================================");
		return model;
	}
}
